﻿using System;
using LM.InterfacesFabricas.Utilidades;

namespace LM.Tela.Desktop
{

    using LM.InterfacesFabricas.DTOs;
    using LM.InterfacesFabricas.Fabricas;
    using LM.InterfacesFabricas.Interfaces.Servicos;
    using System.Collections.Generic;
    using System.Globalization;

    public partial class frmDependente
    {
        public frmDependente()
        {
            InitializeComponent();
            BindCliente();
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);
            var cliente = (DtoCliente) cmbCliente.SelectedItem;
            var Dependente = new DtoDependente { Codigo = codigo, Nome = txtNome.Text.Trim(), Cpf = txtCpf.Text.Trim(), Cnh = txtCnh.Text.Trim(), Cliente = cliente};
            var servicoDeDependente = FabricaGenerica.Crie<IServicoDeDependente>();

            if (!EmEdicao())
            {
                servicoDeDependente.Cadastre(Dependente);
            }
            else
            {
                servicoDeDependente.Atualize(Dependente);
            }

            PrepareTelaParaNovoRegistro();
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtNome.Text = string.Empty;
            txtCpf.Text = string.Empty;
            txtCnh.Text = string.Empty;
        }
        
        private void frmDependente_Load(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private void grdDependentes_CellDoubleClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                var Dependente = ((IList<DtoDependente>)grdDependentes.DataSource)[e.RowIndex];

                txtCodigo.Text = Dependente.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtNome.Text = Dependente.Nome;
                txtCpf.Text = Dependente.Cpf;
                txtCnh.Text = Dependente.Cnh;
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Dependente não selecionado para edição.");
            }
            else
            {
                if (grdDependentes.Rows.Count > 0)
                {
                    //Dependentes.RemoveAt(grdDependentes.SelectedRows[0].Index);
                }

                PrepareTelaParaNovoRegistro();
            }
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
        }

        private void BindCliente()
        {
            var servicoDeCliente = FabricaGenerica.Crie<IServicoDeCliente>();

            var clientes = servicoDeCliente.ConsulteTodos();
            cmbCliente.ValueMember = "Codigo";
            cmbCliente.DisplayMember = "Nome";
            cmbCliente.DataSource = clientes;
            cmbCliente.SelectedIndex = -1;
        }

        private void cmbCliente_SelectionChangeCommitted(object sender, EventArgs e)
        {
            var servicoDeDependente = FabricaGenerica.Crie<IServicoDeDependente>();
            var codigoCliente = (DtoCliente) cmbCliente.SelectedItem;
            var dependentes = servicoDeDependente.ConsultaTodosPorCliente(codigoCliente.Codigo);

            grdDependentes.DataSource = null;
            grdDependentes.DataSource = dependentes;
        }
    }
}
